# _*_ coding: utf-8 _*_
"""
@ 时间    ：2024/10/26 17:13
@ 作者    ：旺财
@ 文件    ：01 基本原理.py
@ 说明    ：   
"""

import pandas as pd
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from scipy.stats import pearsonr

"""智能推荐系统的基础:协同过滤算法
分两类:1 基于用户 2 基于产品
简单说就是找相似用户或相似产品
而计算相似度的最常用方法如下:
1 欧式距离 2 余弦值 3 皮尔逊相关系数
"""

# 1.欧式距离
df = pd.DataFrame(
    [[5, 1, 5], [4, 2, 2], [4, 2, 1]],
    columns=['用户1', '用户2', '用户3'],
    index=['物品A', '物品B', '物品C']
)
print(df)
dist = np.linalg.norm(df.iloc[0] - df.iloc[1])
print(f'物品A与B的欧氏距离为{dist}')
print()

# 2.余弦相似度
user_similarity = cosine_similarity(df)
print(pd.DataFrame(user_similarity, columns=['物品A', '物品B', '物品C'], index=['物品A', '物品B', '物品C']))
print()

# 3.皮尔逊相关系数
# 当P值小于0.05时才有相关性可言,满足该条件后,如果系数r的绝对值越靠近1,则表明相关性越高
x = [1, 3, 5, 7, 9]
y = [9, 8, 6, 4, 2]
r, p, *_ = pearsonr(x, y)
print(f'相关系数r值为:{r},显著相关水平P值为:{p}')
